Wie wird das Schlüsselwort "RETAIN" für Funktionsbaustein-Instanzen berücksichtigt?
Die →Variablen von →Funktionsbaustein-Instanz werden bzgl. RETAIN
und NON_RETAIN
so wie jener Abschnitt VAR
behandelt, in dem die Funktionsbaustein-Instanz deklariert ist. Das bedeutet:
-
Falls das Schlüsselwort
RETAIN
im AbschnittVAR
definiert ist, werden die Variablen der Funktionsbaustein-Instanz so behandelt, als wären sie mitRETAIN
deklariert. -
Falls das Schlüsselwort
NON_RETAIN
im AbschnittVAR
definiert ist, werden die Variablen der Funktionsbaustein-Instanz so behandelt, als wären sie mitNON_RETAIN
deklariert.
Ausgenommen davon sind die folgenden Fälle:
-
Eine oder mehrere Variablen wurden ausdrücklich als
NON_RETAIN
oderRETAIN
in der Deklaration des zugehörigen Funktionsbausteins deklariert. -
Sind in der Deklaration des zugehörigen Funktionsbausteins erneut Funktionsbaustein-Instanzen deklariert, gilt für deren Variablen nicht die Deklaration von
RETAIN
oderNON_RETAIN
des AbschnittsVAR
der ersten Funktionsbaustein-Instanz (sondern jene im zugehörigen Funktionsbaustein).
Hier ein Beispiel zu den oben genannten Regeln:
Basierender ST-Code für die folgende Tabelle
PROGRAM Test
VAR RETAIN
myFB1 : FB1;
var1 : INT;
END_VAR
END_PROGRAM
FUNCTION_BLOCK FB1
VAR
var2 : INT;
myFB2 : FB2;
myFB3 : FB3;
END_VAR
VAR NON_RETAIN
var3 : INT;
myFB3_2 : FB3;
END_VAR
VAR RETAIN
var7 : INT;
myFB3_3 : FB3;
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB2
VAR
var4 : INT;
END_VAR
VAR NON_RETAIN
var5 : INT;
myFB3 : FB3;
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB3
VAR
var6 : INT;
END_VAR
END_FUNCTION_BLOCK
Die Variable... |
wird als ... behandelt. |
Grund |
---|---|---|
|
|
Schlüsselwort |
|
|
Schlüsselwort |
|
|
Schlüsselwort |
|
|
Schlüsselwort |
|
|
keine Schlüsselwörter in Zeilen 9 und 25 |
|
|
Schlüsselwort |
|
|
keine Schlüsselwörter in Zeilen 9 und 35 |
|
|
Schlüsselwort |
|
|
Schlüsselwort |
|
|
Schlüsselwort |